package com.utils;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

@MappedJdbcTypes({JdbcType.VARCHAR})
//@MappedJdbcTypes定义的是JdbcType类型，这里的类型不可自己随意定义，必须要是枚举类org.apache.ibatis.type.JdbcType所枚举的数据类型。
@MappedTypes({Date.class})
//@MappedTypes定义的是JavaType的数据类型，描述了哪些Java类型可被拦截。
public class MyDateTypeHandler extends BaseTypeHandler<Date> {
	 //将java类型 转换成 数据库需要的类型
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
        System.out.println("java类型转换成数据表类型");
    	preparedStatement.setString(i, String.valueOf(date.getTime()));
    }
    
   //将数据库中类型 转换成java类型
    //String参数  要转换的字段名称
    //ResultSet 查询出的结果集
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
    	System.out.println("数据表类型转换成java类型");
        return new Date(resultSet.getLong(s));
    }

    //将数据库中类型 转换成java类型
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
    	System.out.println("33333");
        return new Date(resultSet.getLong(i));
    }

    //将数据库中类型 转换成java类型
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
    	System.out.println("44444");
        return callableStatement.getDate(i);
    }
}